package br.com.foxinline.manager.pesquisar;

import br.com.foxinline.modelo.*;
import br.com.foxinline.servico.*;
import br.com.foxinline.utilitario.Msg;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author laverson
 */
@ViewScoped
@ManagedBean
public class ManagerPesquisarCadastroDomiciliar extends ManagerPesquisarGenerico<CadastroDomiciliar> implements Serializable {

    @EJB
    CadastroDomiciliarServico cadastroDomiciliarServico;
    @EJB
    ProfissionalServico profissionalServico;
    @EJB
    CidadaoServico cidadaoServico;
    @EJB
    EnderecoServico enderecoServico;
    private CadastroDomiciliar cadastro;
    private Profissional profissional;
    private List<Profissional> profissionais;
    private Cidadao responsavel;
    private Cidadao responsavelPesquisar;
    private List<Cidadao> responsaveis;

    @Override
    @PostConstruct
    public void init() {
        setServico(cadastroDomiciliarServico);

        cadastro = new CadastroDomiciliar();
        cadastro.setProfissional(new Profissional());
        cadastro.getProfissional().setEquipe(new Equipe());
        cadastro.getProfissional().setMicroArea(new MicroArea());
        cadastro.getProfissional().getEquipe().setUnidade(new Unidade());

        cadastro.setEndereco(new Endereco());
        cadastro.getEndereco().setBairro(new Bairro());

        iniciarResponsavel();
        iniciarProfissional();
    }

    @Override
    public void pesquisar() {
        cadastro.setCadastroDomiciliarFamilias(new ArrayList<CadastroDomiciliarFamilias>());

        CadastroDomiciliarFamilias familia = new CadastroDomiciliarFamilias();
        familia.setResponsavel(responsavel);

        cadastro.getCadastroDomiciliarFamilias().add(familia);

        entidadePesquisar = cadastro;
        super.pesquisar();
    }

    @Override
    public void limpar() {
        init();
    }

    @Override
    public void remover() {
        try {
            entidadeRemover.setAtivo(Boolean.FALSE);
            cadastroDomiciliarServico.atualizar(entidadeRemover);
            Msg.messagemInfo(Msg.SuccessFull);
            onLoadModel();
        } catch (Exception e) {
            e.printStackTrace();
            Msg.messagemError(Msg.Failure);
        }
    }

    public void removerProfissional() {
        cadastro.setProfissional(new Profissional());
        cadastro.getProfissional().setEquipe(new Equipe());
        cadastro.getProfissional().setMicroArea(new MicroArea());
        cadastro.getProfissional().getEquipe().setUnidade(new Unidade());
    }

    public void selecionarProfissional(Profissional profissional) {
        cadastro.setProfissional(profissional);
        limparProfissionalDialog();
    }

    public void pesquisarProfissional() {
        profissionais = profissionalServico.findProfissional(profissional);
    }

    public void limparProfissionalDialog() {
        iniciarProfissional();
    }

    public void existeEndereco() {

        Endereco endereco = enderecoServico.existCep(cadastro.getEndereco());

        if (endereco != null) {
            cadastro.setEndereco(endereco);
        } else {
            String cep = cadastro.getEndereco().getCep();
            cadastro.setEndereco(new Endereco());
            cadastro.getEndereco().setCep(cep);
        }
    }

    public void pesquisarResponsavel() {
        responsaveis = cidadaoServico.pesquisarTodos(responsavelPesquisar);
    }

    public void removerResponsavel() {
        responsavel = new Cidadao();
    }

    public void selecionarResponsavel(Cidadao responsavel) {
        this.responsavel = responsavel;
        limparResponsavelDialog();
    }

    public void limparResponsavelDialog() {
        responsavelPesquisar = new Cidadao();
        responsaveis = new ArrayList<Cidadao>();
    }

    public CadastroDomiciliar getCadastro() {
        return cadastro;
    }

    public void setCadastro(CadastroDomiciliar cadastro) {
        this.cadastro = cadastro;
    }

    public Profissional getProfissional() {
        return profissional;
    }

    public void setProfissional(Profissional profissional) {
        this.profissional = profissional;
    }

    public List<Profissional> getProfissionais() {
        return profissionais;
    }

    public Cidadao getResponsavel() {
        return responsavel;
    }

    public void setResponsavel(Cidadao responsavel) {
        this.responsavel = responsavel;
    }

    public List<Cidadao> getResponsaveis() {
        return responsaveis;
    }

    public void setResponsaveis(List<Cidadao> responsaveis) {
        this.responsaveis = responsaveis;
    }

    public Cidadao getResponsavelPesquisar() {
        return responsavelPesquisar;
    }

    public void setResponsavelPesquisar(Cidadao responsavelPesquisar) {
        this.responsavelPesquisar = responsavelPesquisar;
    }

    public void setProfissionais(List<Profissional> profissionais) {
        this.profissionais = profissionais;
    }

    private void iniciarProfissional() {
        profissional = new Profissional();
        profissionais = new ArrayList<Profissional>();
    }

    private void iniciarResponsavel() {
        responsavel = new Cidadao();
        responsavelPesquisar = new Cidadao();
    }
}
